同构体字符串(如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。)
示例 1:
输入: s ="egg",t ="add"
输出: true
示例 2:
输入: s ="foo",t ="bar"
输出: false
示例 3:
输入: s ="paper",t ="title"
输出: true
说明:
你可以假设 s 和 t 具有相同的长度。
思路:定义并初始化count = 1,第一个字符通常我们记为1,后面出现不同的字符count依次累加,遇见相同的字符,我们找出前面相同字符所表示的数字添加。例如字符串s = "papper" 字符串t = "tittle" ,把s可表示为121134 t可表示为121134 在比较s和t是否相等,
代码如下:
public static boolean isIsomorphic(String s,String t) {
//如果长度不相等直接返回false
if(s.length() != s.length()) return false;
//定义StringBuilder对象sb_s 和 sb_t
StringBuilder sb_s = new StringBuilder();
StringBuilder sb_t = new StringBuilder();
//定义两个标记,从1开始,最大可以加到26,因为只有26个字符
int count_s = 1;
int count_t = 1;
//先对两个sb对象添加1,因为首字符不用做比较,它是同构的
sb_s.append(1);
sb_t.append(1);
//从下标1开始遍历遍历
for(int i = 1;i<s.length();i++) {
//判断当前字符在前面字符串中的字符是否有相等的,相等返回前面相同字符的下标,不包含返回-1
int flag_s = isContainsCharacter(s.substring(0, i), s.charAt(i));
int flag_t = isContainsCharacter(t.substring(0, i), t.charAt(i));
//有相同字符,那么sb对象就添加之前相同字符下标在sb对象中对应的字符 (这块有点绕口)
if(flag_s != -1) {
sb_s.append(sb_s.charAt(flag_s));
}else {
//没有相同字符,对标记先加1在加入sb对象中
sb_s.append(++count_s);
}
//有相同字符,那么sb对象就添加之前相同字符下标在sb对象中对应的字符 (这块有点绕口)
if(flag_t != -1) {
sb_t.append(sb_t.charAt(flag_t));
}else {
//没有相同字符,对标记先加1在加入sb对象中
sb_t.append(++count_t);
}
}
//比较两个sb对象是否相同,相同返回true,否则返回false
return sb_s.toString().equals(sb_t.toString());
}
//用于比较字符串是否包含字符,包含返回下标,不包含返回-1
public static int isContainsCharacter(String s,char c) {
for(int i = 0;i<s.length();i++) {
if(s.charAt(i) == c)
return i;
}
return -1;
}
同构体字符串(如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。)的更多相关文章
- 用Java编程找到两个字符串中共有的字符
这道题的算法思想是把字符串1中的每个字符与字符串2中的每个字符进行比较,遇到共同拥有的字符,放入另一个数组中,最后顺序输出即可 但是这道题的难点在于怎么排除重复的字符 public class bot ...
- 写一个函数,实现两个字符串的比较。即实现strcmp函数,s1=s2时返回0,s1!=s2时返回二者第一个不同字符的ASCII值。
#include<stdio.h> #include<stdlib.h> int main(){ setvbuf(stdout,NULL,_IONBF,); ],s2[]; i ...
- [google面试CTCI] 1-4.判断两个字符串是否由相同字符组成
[字符串与数组] Q:Write a method to decide if two strings are anagrams or not 题目:写一个算法来判断两个字符串是否为换位字符串.(换位字 ...
- 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度。 2)输出字符串中第一个出现字母a的位置。 3)在字符串的第3个字符后面插入子串“hello”,输出新字符串。 4)将字符串“hello”替换为“me”,输出新字符串。 5)以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。 */
namespace test4 {/* 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度. 2)输出字符串中第一个出现字母a的位置. 3)在字符串的第3个字符 ...
- 字符和字符串在Java中的旅程
以下是个人对java中字符和字符串的见解,如有疏漏之处,还请不吝赐教. 下面通过一个简单的程序来说明字符和字符串在Java中的旅程. 以字符 ' 中 '为例, 它的GBK编码是2个字节:0xd6d0, ...
- c语言中的利用函数实现交换两个字符,交换两个字符串
c语言交换两个字符: 方法一:利用指针传址,效率比较高 void swap(int *a,int *b) { int temp; temp = *a; *a = *b; *b = temp } 方法二 ...
- 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。
在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"LX"替换一个"XL ...
- lintcode702 连接两个字符串中的不同字符
连接两个字符串中的不同字符 给出两个字符串, 你需要修改第一个字符串,将所有与第二个字符串中相同的字符删除, 并且第二个字符串中不同的字符与第一个字符串的不同字符连接 思路:遍历两个字符串,找到互 ...
- str_1.判断两个字符串每个字符出现的次数一样
1.两个字符串每个字符出现的次数一样 $str1 = "ab'c4*"; $str2 = "cb*'a4"; $ret = isBX($str1, $str2) ...
- python统计两个字符串从首字符开始最大连续相同的字符数
在python中统计两个字符串从首字符开始最大连续相同的字符数,函数如下: def get_num(s1, s2): num = 0 len_s1 = len(s1) list_s1 = [] for ...
随机推荐
- 解决定位工具报错Error while parsing UI hierarchy XML file: Invalid ui automator hierarchy file.
在微信自动化测试中,偶尔会出现某个页面一直无法读取到页面元素的情况,原因是页面未加载完成 解决方式:1.重启APP 2.建议上下滑动当前页面,如朋友圈,会出现滑动到某个地方,出现可以读取到的情况 参考 ...
- Js操作Array数组
之前写过一篇文章,但是很模糊,不过却给我提供了一个思路,所以没有删除,这次写的是一个完善版本! 因为在很多的时候我们在选中了几行数据,然后存放在Array中,如下图: 看下控制台的数据 我双击了这两个 ...
- Android 代码混淆 混淆方案
本篇文章:自己在混淆的时候整理出比较全面的混淆方法,比较实用,自己走过的坑,淌出来的路.请大家不要再走回头路,可能只要我们代码加混淆,一点不对就会导致项目运行崩溃等后果,有许多人发现没有打包运行好好地 ...
- hibernate入门程序
快速入门 1. 下载Hibernate框架的开发包 2. 编写数据库和表结构 Create database hibernate_day01; Use hibernate_da ...
- Oracle12C_____处理数据库01033连接错误问题.sql
Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\Users\Administrator&g ...
- Confluence 6 自定义 Decorator 模板的宏和针对高级用户
宏 页面的某些部分使用的是 Velocity 宏进行创建的,包括导航栏.有关宏的创建,你可以参考页面 Working With Decorator Macros 页面中的内容. 针对高级用户 vel ...
- python之多线程通信
共享变量通信 事实上共享变量通信是会造成线程安全的,除非我们对这个共享变量是有足够了解的,如非必要就不要使用共享变量在线程间进行通信 Queue通信 理解不深入,暂不写
- 2017-2018-2 20165314 实验三《 敏捷开发与XP实践》实验报告
知识点: 1.XP团队使用现场客户.特殊计划方法和持续测试来提供快速的反馈和全面的交流: -XP是以开发符合客户需要的软件为目标而产生的一种方法论 -XP是一种以实践为基础的软件工程过程和思想 -XP ...
- Wowza 相关
下载: 1.https://www.wowza.com/pricing/installer 安装: https://www.wowza.com/docs/how-to-install-and-conf ...
- Python迷宫游戏(基础版)
# 画地图map_data = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 1, 1, 1, 1, 1, 1, 1, 1], [1, 2, 1, 0, 0, 0, ...