844. Backspace String Compare - Easy

Given two strings S and T, return if they are equal when both are typed into empty text editors. # means a backspace character.

Example 1:

Input: S = "ab#c", T = "ad#c"
Output: true
Explanation: Both S and T become "ac".

Example 2:

Input: S = "ab##", T = "c#d#"
Output: true
Explanation: Both S and T become "".

Example 3:

Input: S = "a##c", T = "#a#c"
Output: true
Explanation: Both S and T become "c".

Example 4:

Input: S = "a#c", T = "b"
Output: false
Explanation: S becomes "c" while T becomes "b".

Note:

  1. 1 <= S.length <= 200
  2. 1 <= T.length <= 200
  3. S and T only contain lowercase letters and '#' characters.

Follow up:

  • Can you solve it in O(N) time and O(1) space?

 

M1: stack

时间:O(M+N),空间:O(M+N)

class Solution {
     public boolean backspaceCompare(String S, String T) {
         Stack<Character> s = new Stack<>();
         Stack<Character> t = new Stack<>();
        
         for(int i = 0; i < S.length(); i++) {
             if(S.charAt(i) != '#')
                 s.push(S.charAt(i));
             else if(!s.isEmpty())
                 s.pop();
         }
         for(int i = 0; i < T.length(); i++) {
             if(T.charAt(i) != '#')
                 t.push(T.charAt(i));
             else if(!t.isEmpty())
                 t.pop();
         }
        if(s.size() != t.size()) return false;
        for(int i = 0; i < s.size(); i++) {
            if(s.pop() != t.pop())
                return false;
        }
        return true;
     }
}

 

M2: two pointers

从后往前扫描字符串,用常数cnt统计退格数。遇到‘#’,cnt++;遇到字母并且cnt > 0,cnt--并且指针--;遇到字母但是cnt=0,break退出循环,比较两个字符串对应字符是否相等,不等返回false。如果最后扫描完两个字符串,两个指针都=-1,返回true。如果只扫描完一个字符串,返回false。

时间:O(M+N),空间:O(1)

class Solution {
     public boolean backspaceCompare(String S, String T) {
         int p1 = S.length() - 1, p2 = T.length() - 1;
         int cnt1 = 0, cnt2 = 0;
         while(p1 >= 0 || p2 >= 0) {
             while(p1 >= 0) {
                 if(S.charAt(p1) == '#') {
                     p1--;cnt1++;
                 }
                 else if(S.charAt(p1) != '#' && cnt1 > 0) {
                     p1--;cnt1--;
                 }
                 else
                     break;
             }
             while(p2 >= 0) {
                 if(T.charAt(p2) == '#') {
                     p2--;cnt2++;
                 }
                 else if(T.charAt(p2) != '#' && cnt2 > 0) {
                     p2--;cnt2--;
                 }
                 else
                     break;
             }
             if(p1 == -1 && p2 == -1) return true;
             if(p1 == -1 || p2 == -1) return false;
             if(S.charAt(p1) != T.charAt(p2)) return false;
             p1--;p2--;
         }
         return true;
     }
}

 

转载于:https://www.cnblogs.com/fatttcat/p/10015990.html

用空格隔开 如果敲错了 按下ctrl+backspace可以删除 注意一定要有四个)" one two three four if [ ! -n $four ] then echo "Args Number Input Error..." exit; fi}# 获取用户的8个配置文件存放路径和将要安装的目录function getFilesAndTargetDir(){ read -p "请输入你的软件包路径(绝对路径)" softwareDir read -p "请输入你的8个配置文件存放路径(配置文件已修改好 绝对路径)" filesDir read -p "你想要将HA安装在哪个目录下(空目录 绝对路径)" targetDir}function getUserPathFileName(){ read -p "你的环境变量配置文件名:(在/etc/profile.d/下 例如my_path.sh 只要文件名)" pathFileName}# 1 function unpackSoftwarePackage(){ echo "----------一、解压软件包----------" sleep 2 echo "----------1.创建hadoop HA高可用目录:$targetDir/----------" if [ ! -d "$targetDir/" ];then mkdir $targetDir/ fi echo "----------2.解压JDK----------" tar -xzvf $softwareDir/jdk-8u202-linux-x64.tar.gz -C $targetDir/ echo "----------3.解压hadoop----------" tar -xzvf $softwareDir/hadoop-3.1.3.tar.gz -C $targetDir/ echo "----------4.解压zookeeper----------" tar -xzvf $softwareDir/apache-zookeeper-3.5.7-bin.tar.gz -C $targetDir/ echo "----------第一步已完成----------" return 0}# 2 function changeName(){ echo "----------二、改名----------" sleep 2 echo "----------1.重命名Zookeeper----------" mv $targetDir/apache-zookeeper-3.5.7-bin/ $targetDir/zookeeper echo "----------2.重命名JDK----------" mv $targetDir/jdk1.8.0_202/ $targetDir/jdk1.8 echo "----------第二步已完成----------" return 0}# 3function copyConfigurationFiles(){ echo "----------三、修改八个配置文件----------" sleep 2 echo "----------1.修改hadoop下的6个文件----------" cat $filesDir/core-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/core-site.xml cat $filesDir/hdfs-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/hdfs-site.xml cat $filesDir/mapred-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/mapred-site.xml cat $filesDir/yarn-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/yarn-site.xml cat $filesDir/workers > $targetDir/hadoop-3.1.3/etc/hadoop/workers cat $filesDir/hadoop-env.sh > $targetDir/hadoop-3.1.3/etc/hadoop/hadoop-env.sh echo "----------2.修改zookeeper下的1个文件----------" mv $targetDir/zookeeper/conf/zoo_sample.cfg $targetDir/zookeeper/conf/zoo.cfg cat $filesDir/zoo.cfg > $targetDir/zookeeper/conf/zoo.cfg echo "----------3.修改环境变量----------" cat $filesDir/$pathFileName > /etc/profile.d/$pathFileName source /etc/profile.d/$pathFileName echo "----------4.安装psmisc插件----------" sudo yum install -y psmisc ssh $two "sudo yum install -y psmisc" echo "----------第三步已完成----------" return 0}# 4.function createDir(){ echo "----------四、创建目录----------" sleep 2 echo "----------1.创建zkData高可用目录----------" mkdir $targetDir/zookeeper/zkData touch $targetDir/zookeeper/zkData/myid echo "----------2.创建Hadoop数据临时目录----------" mkdir $targetDir/tmp echo "----------3.创建JournalNode日志目录----------" mkdir $targetDir/logs echo "----------第四步已完成----------" return 0}# 5.function xsyncHA(){ echo "----------五、分发HA目录----------" sleep 2 xsync $targetDir/ echo "----------1.分发环境变量配置文件----------" for i in $two $three $four do sudo scp /etc/profile.d/$pathFileName $i:/etc/profile.d/ done echo "----------2.刷新环境变量----------" for i in $two $three $four do ssh $i "source /etc/profile.d/$pathFileName" done echo "----------第五步已完成----------" return 0}# 6.function changeMyIdOfZK(){ echo "----------六、修改zookeeper的myid 使用ssh方式----------" sleep 2 echo "---------- 修改two的myid文件------------" ssh $two "echo '1' >> $targetDir/zookeeper/zkData/myid" echo "---------- 修改three的myid文件------------" ssh $three "echo '2' >> $targetDir/zookeeper/zkData/myid" echo "---------- 修改four的myid文件------------" ssh $four "echo '3' >> $targetDir/zookeeper/zkData/myid" echo "----------第六步已完成----------"}# 7.function startZKOnThreeNode(){ echo "----------七、启动ZK----------" sleep 2 echo "----------启动zookeeper----------" for i in $two $three $four do echo ---------- zookeeper $i 启动 ------------ ssh $i "$targetDir/zookeeper/bin/zkServer.sh start" done echo "----------第七步已完成----------"}# 8.function startHadoop(){ echo "----------八、启动hadoop----------" sleep 2 echo "----------1.启动JournalNode----------" for i in $one $two $three do echo ---------- hadoop $i JournalNode启动 ------------ ssh $i "hdfs --daemon start journalnode" done echo "----------2.初始化NameNode----------" hdfs namenode -format echo "----------3.初始化Zookeeper----------" ssh $two "hdfs zkfc -formatZK" echo "----------4.启动两个NameNode----------" hdfs --daemon start namenode ssh $two "hdfs namenode -bootstrapStandby" echo "----------5.启动集群----------" start-dfs.sh echo "----------第八步已完成----------" echo "----------Hadoop HA高可用搭建已完成----------"}# 调用上述函数完成安装HAtestReadgetFilesAndTargetDirgetUserPathFileNameunpackSoftwarePackagechangeNamecopyConfigurationFilescreateDirxsyncHAchangeMyIdOfZKstartZKOnThreeNodestartHadoop123
03-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值