算法:两个字符串:abcdefg,10abcf,计算得出:位置0多出:10 位置3缺少:de 位置6错误,应为:gh

这篇具有很好参考价值的文章主要介绍了算法:两个字符串:abcdefg,10abcf,计算得出:位置0多出:10 位置3缺少:de 位置6错误,应为:gh。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

双循环解决:

func compareStrings(str1 string, str2 string) {
	len1 := len(str1)
	len2 := len(str2)

	idx1 := 0
	idx2 := 0
	for i := 0; i < len1; i++ {
		for j := idx2; j < len2; j++ {
			if str1[i] == str2[j] {
				if j > idx2 && i == idx1 {
					fmt.Printf("位置%d多出:%s\n", i, str2[idx2:j])
					idx1++
					idx2 = j + 1
				} else if i > idx1 && j == idx2 {
					fmt.Printf("位置%d缺少:%s\n", idx1, str1[idx1:i])
					idx1 = i + 1
					idx2++
				} else if i > idx1 && j > idx2 {
					fmt.Printf("位置%d错误,应为:%s\n", idx1, str1[idx1:i])
					idx1 = i + 1
					idx2 = j + 1
				} else {
					idx1++
					idx2++
				}
				break
			}
		}
		if i == (len1-1) && (idx1 < len1) {
			fmt.Printf("位置%d错误,应为:%s\n", idx1, str1[idx1:i+1])
		}
	}
}

解析

```

取 idx1和idx2作为滑动窗口起点。以 str1 字符串1为基准,遍历str2字符串2寻找相同的字符。文章来源地址https://www.toymoban.com/news/detail-640267.html

		idx1 = 0;
		idx2 = 0;
        for i := 0; i < len1; i++ {
			for j := idx2; j < len2; j++ {

			if(str1[i] == str2[idx2]){
			 // 匹配上了;但是可能位置不对, 这里就要分 多种情况

			 1、 多出字符串:
			  str2的循环下标  j > idx2 && i == idx1, : 这种情况就是 2个循环下标的内容相同, 但是 str2 循环体位置 要大于 str2基准位置, 并且 上一层的str1 循环体位置和基准值idx1是一致的,
			  那就证明  j > idx2 , 就是多出来的值;

			  判断完后:
			  idx1 ++;
			  inx2 = j +1;

			 2、缺少字符串:  i > idx1 && j == idx2

			  如果 str1 循环 下标i 要大于  str1 的基准  但是 str2的循环下标等于  str2的基准值

			  那就证明 str2 缺少了数据, 缺少的内容为:idx1 -> i 之间的内容

			  判断完后:
			  idx1 = i + 1;
			  idx2 ++;


			 3、位置错误; i > idx1 && j > idx2

			  str1的循环体位置 大于 str1基准值,并且 str2的循环体 大于  str2的基准值,
		      说明两个字符串相同字符前,各有一段不相同字符
			  那就是实际上 str1 上基准位置: idx1 的位置上值应该是: idx1 -> i 之前的距离;
			  简单理解就是: 循环体 循环的时候,值相同, 但是都不等于实际的 基准位置,已第一层str1循环作为判断,那就str1 实际位置应该是啥,但是str2并不是;

			  判断完后:
			  idx1++;
			  idx2++;

			 4、break  如果三个条件都不满足 证明碰到了连续字符串
   			 将 idx1++; idx2++; 再 break即可

        }
      }

 	  // 第一层,每循环一次, 判断一下:
      // 如果 外层 已经循环到结尾了, 但是基准下标 仍然 要比 第一层字符串的长度小,
	  //  那么证明 str2 和 str1长度不匹配,
      // 多出的内容的第一层str1 基准值 到最后的位置的值 ,
	   if i == (len1-1) && (idx1 < len1) {
			fmt.Printf("位置%d错误,应为:%s\n", idx1, str1[idx1:i+1])
		}


```

到了这里,关于算法:两个字符串:abcdefg,10abcf,计算得出:位置0多出:10 位置3缺少:de 位置6错误,应为:gh的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Day28】力扣算法(超详细思路+注释) [1790. 仅执行一次字符串交换能否使两个字符串相等 ] [328. 奇偶链表 ][148. 排序链表]

    原题链接:1790. 仅执行一次字符串交换能否使两个字符串相等 题目描述 : 给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。 如果对 其中一个字符串 执行 最多一次字符串交

    2024年01月22日
    浏览(37)
  • MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算

    1. 编辑框添加变量,并选择变量类型为CString。     CString m_strReg;        DDX_Text(pDX, IDC_EDIT_REG, m_strReg); 2. 使用“strtoul”或“_tcstoul”函数将Cstring 类型转换为16进制/10进制数进行计算。     CString tmp;     UpdateData(TRUE);     UpdateData(FALSE);          OutputDebugString(m_strReg);  

    2024年02月16日
    浏览(42)
  • 刷题笔记之七(统计每个月兔子的总数+汽水瓶+查找两个字符串a,b中的最长公共子串+公共子串计算)

    目录 1. 数据库中,count不会返回null值,max和concat可能会返回null值 2. 数据库特点: 共享性高,冗余度小,安全性强,独立性强 3.  top是sql server中的,用于求前n条数据 4. 数据库使用函数进行全部扫描(数据遍历)最慢,并且函数执行本身也是需要耗时的 5.  使用%作为

    2023年04月09日
    浏览(34)
  • 将两个字符串合并为一个字符串并且输出(二)

    在这个示例中,我们定义了三个字符数组变量 str1 、 str2 和 result ,分别用于存储第一个字符串、第二个字符串和合并后的结果字符串。 我们首先使用 strcpy 函数将第一个字符串复制到结果字符串中,然后使用 strcat 函数将第二个字符串追加到结果字符串的末尾。 最后,我们

    2024年02月12日
    浏览(39)
  • Python字符串比较:如何判断两个字符串是否相等?

    Python字符串比较:如何判断两个字符串是否相等? 在Python编程中,字符串是最常用的数据类型之一。当我们需要比较两个字符串时,通常需要判断它们是否相等。这篇文章将详细介绍Python中比较两个字符串的方法。 使用“==”运算符比较字符串 在Python中,可以使用“==”运算

    2023年04月11日
    浏览(45)
  • 【JavaScript数据结构与算法】字符串类(计算二进制子串)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目

    2024年02月05日
    浏览(27)
  • Java算法题 给一个字符串表达式,实现一个基本计算器,返回计算结果

    题目: 考点:栈 解题思路: 使用 2 个栈,一个 stack_nums 用来保存计算过程的操作数,一个 stack_symbol 用来保存运算符。 在HashMap中,指定加减优先级为1,乘除优先级为2 循环遍历字符串s, 操作符入栈: 若当前字符为\\\'+\\\', \\\'-\\\', \\\'*\\\', \\\'/\\\', \\\'(\\\' 时,压入运算符栈 stack_symbol, 操作数入

    2024年02月07日
    浏览(36)
  • 1657. 确定两个字符串是否接近

    1657. 确定两个字符串是否接近(面试题打卡/中等) 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/determine-if-two-strings-are-close 题干: 如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 : 操作 1:交换任意两个 现有 字符。 例如,abcde - aecdb 操作

    2024年02月16日
    浏览(36)
  • Python中的比较两个字符串

    📚 个人网站:ipengtao.com 在Python编程中,字符串比较是一项常见且关键的操作,涵盖了诸多方法和技巧。比较两个字符串是否相等、大小写是否一致,或者在一个字符串中寻找特定的子字符串,都是日常开发中经常遇到的需求。除此之外,使用正则表达式进行模式匹配、比较

    2024年01月19日
    浏览(41)
  • 【LeetCode】583. 两个字符串的删除操作

    这道题的状态定义和 1143. 最长公共子序列 相同,「定义一个 dp 数组,其中 dp[i]表示 到位置 i 为止的子序列性质 ,并不是必须以 i 结尾」,此时 dp 数组的最后一位即为题目所求,不需要对每个位置进行统计。 状态定义 dp[i][j] 表示到 字符串word1 的第 i 个字符为止、word2 的第

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包